/**
 * 域名备案统计表
 * @author rxliuli
 */
class RDomainArchive {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} [option.id] 主键
     * @param {Number} [option.belongYear] 所属年，例如：2019
     * @param {Number} [option.totalCount] 总数量
     * @param {Number} [option.preQueryCount] 待查询数量(统计还未与备案系统对接的域名数量)
     * @param {Number} [option.unArchiveCount] 未备案数量
     * @param {Number} [option.archivedCount] 已备案数量
     * @param {Number} [option.selfArchiveCount] 自备案数量
     * @param {Number} [option.ineffectiveCount] 已失效数量
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    id,
                    belongYear,
                    totalCount,
                    preQueryCount,
                    unArchiveCount,
                    archivedCount,
                    selfArchiveCount,
                    ineffectiveCount,
                    ...args
                } = {}) {
        this.id = id
        this.belongYear = belongYear
        this.totalCount = totalCount
        this.preQueryCount = preQueryCount
        this.unArchiveCount = unArchiveCount
        this.archivedCount = archivedCount
        this.selfArchiveCount = selfArchiveCount
        this.ineffectiveCount = ineffectiveCount
        Object.assign(this, args)
    }
}

/**
 * 域名备案统计表-日报
 * @author rxliuli
 */
class RDomainArchiveMon extends RDomainArchive {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} [option.month] 统计日，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    month,
                    ...args
                } = {}) {
        super(args)
        this.month = month
        Object.assign(this, args)
    }
}

/**
 * 域名备案统计表-周报
 * @author rxliuli
 */
class RDomainArchiveWeek extends RDomainArchive {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} option.week 统计周，一年52周，从第一周开始，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    week,
                    ...args
                } = {}) {
        super(args)
        this.week = week
        Object.assign(this, args)
    }
}

/**
 * 域名备案统计表-日报
 * @author rxliuli
 */
class RDomainArchiveDay extends RDomainArchive {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} option.day 统计周，一年52周，从第一周开始，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    day,
                    belongMonth,
                    ...args
                } = {}) {
        super(args)
        this.day = day
        this.belongMonth = belongMonth
        Object.assign(this, args)
    }
}
